package com.ruoyi.orderEat.service;

import java.util.List;

import com.github.pagehelper.PageInfo;
import com.ruoyi.orderEat.domain.*;

/**
 * 订单信息Service接口
 *
 * @author dinghao
 * @date 2023-12-06
 */
public interface IOrderInfoService {


    public static final String NEW_NAME = "追加订单";

    /**
     * 购物商品前缀
     */
    String USER_TABLE = "user:table:";

    /**
     * 查询订单信息
     *
     * @param orderId 订单信息主键
     * @return 订单信息
     */
    public OrderInfo selectOrderInfoByOrderId(Long orderId);

    /**
     * 查询用户的餐桌号
     *
     * @return 餐桌号
     */
    Integer queryWxTable();

    /**
     * 查询订单信息列表
     *
     * @param orderInfo 订单信息
     * @return 订单信息
     */
    PageInfo<OrderInfo> selectOrderInfos(OrderInfo orderInfo);

    /**
     * 微信查询订单信息列表
     *
     * @param orderInfo 订单信息
     * @return 订单信息集合
     */
    List<OrderInfoVO> selectOrderInfoList(OrderInfo orderInfo, Integer pageNum, Integer pageSize);

    /**
     * 后台管理端查看订单详情
     *
     * @param orderId
     * @return 订单信息集合
     */
    List<ShopCart> selectOrderDetailList(Long orderId);


    /**
     * 管理后台查询订单信息列表
     *
     * @param orderInfo 订单信息
     * @return 订单信息集合
     */
    List<OrderListVO> selectOrderList(OrderInfo orderInfo);


    /**
     * 用户扫码后存储餐桌号
     *
     * @param tableId
     */
    void saveTableAndUser(Integer tableId);


    /**
     * 小程序新增订单信息
     *
     * @param orderShop
     * @return 结果
     */
    public int insertOrderInfo(OrderShop orderShop);

    public int ceshi(OrderShop orderShop);


    /**
     * 新增主子订单
     *
     * @param orderShop
     * @return 结果
     */
    int insertOrderList(OrderShop orderShop);

    /**
     * 结算订单
     *
     * @param orderInfo 订单信息
     * @return 结果
     */
    void updateOrderInfo(OrderInfo orderInfo);

    /**
     * 小程序确认下单
     *
     * @param orderInfo 订单信息
     * @return 结果
     */
    void updateWxOrder(OrderInfo orderInfo);


    /**
     * 修改订单详情
     *
     * @param orderDetailList 订单全量数据
     * @param orderId         订单信息主键
     * @return 结果
     */
    void updateOrderDetail(List<ShopCart> orderDetailList, Long orderId);


    /**
     * 修改订单关联表
     *
     * @param orderInfoVO 订单全量数据
     * @return 结果
     */
    void updateOrderAssociateDetail(OrderInfoVO orderInfoVO);

    /**
     * 批量删除订单信息
     *
     * @param orderIds 需要删除的订单信息主键集合
     * @return 结果
     */
    public int deleteOrderInfoByOrderIds(Long[] orderIds);

    /**
     * 删除订单信息信息
     *
     * @param orderId 订单信息主键
     * @return 结果
     */
    public int deleteOrderInfoByOrderId(Long orderId);

    /**
     * 删除主订单
     *
     * @param orderId 订单信息主键
     */
    void deleteOrderInfo(Long orderId);

    /**
     * 删除追加订单
     *
     * @param orderId 订单信息主键
     */
    void deleteOrderAssociateByOrderAssociatedId(Long orderId);

}
